# -*- coding: utf-8 -*-
"""
file:ch5_1微分求二次函数极值点
author: Fuwen
time: 2022/7/16 9:50
software:PyCharm
"""

import matplotlib.pyplot as plt
import numpy as np

# 二次函数 f(x) = a*x**2 + b*x +c
# 微分： f′(x) = 2*a*x + b
# 偶函数，有极值，

a, b, c = 3, -12, 10
# 计算微分， f′(x)=0时， f(x)原函数有极值
x_min = -b / (2 * a)
y_min = a * x_min**2 + b * x_min + c

# 绘制极小值坐标点
plt.text(x_min-1, y_min+10, '(' + str(x_min) + ',' + str(y_min) + ')')
plt.plot(x_min, y_min, '-o')

# 绘制原函数f(x)
x = np.linspace(-10, 15, 100)
y = a*x**2 + b*x + c
plt.plot(x, y )

# 绘制极小值坐标的切线
x_tanget = x
y_tanget = [y_min for x in x_tanget]
plt.plot(x_tanget, y_tanget)

plt.grid()
plt.show()

# 二次函数的微分|求导，为一次函数， 微分又是x点处的切线斜率，
# 原函数x在定义域内，没点的切线斜率，构成微分函数，一次函数，
# 一次函数随着x的变化而变化，x取n次两个不同点， 其函数值的变化率也不相同，但可度量， 即微分函数、导函数